package org.opens.mybatisplus.dao;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.opens.mybatisplus.pojo.JpaUserDo;

import java.util.List;
import java.util.Map;

@Mapper
public interface JpaUserDoDao extends BaseMapper<JpaUserDo> {

    public List<JpaUserDo> selectByPageTTDatabase(Map<String, Object> map);

    public IPage<JpaUserDo> mySelectPage(
            Page<JpaUserDo> page,
            @Param(value = "id") int id,
            @Param(value = "name") String name,
            @Param(value = "old") int old
    );

    /**
     * 功能:
     *      花里胡哨型查询
     * 说明:
     *      1. 之所以说这个是花里胡哨型查询, 是因为除非能找到直接修改JSONObject中值的方法, 否则如果要控制最终json的数据格式, 就还是需要将JSONObject中的值转移到实体类中, 但是
     *      这样一来, 就相当于使用了中间商, 虽然看是好看了, 但是相当于增加了时间成本.
     */
    public JSONObject findByJsonObject(@Param(value = "id") int id);

    /**
     * 功能:
     *      花里胡哨型查询
     * 说明:
     *      1. JSONObject其实就是Map, Map的操作使重量级的, 会带来严重的效率问题.
     *
     */
    public List<JSONObject> findByJsonObjectResultIsList(@Param(value = "id") int id);

    /**
     * 注意:
     *      使用JSONArray作为返回值会报持久性异常错.
     * @param id id值
     * @return  报错
     */
    public JSONArray findByJsonObjectResultIsArray(@Param(value = "id") int id);

}
